package com.yizisu.mvvmlib.doc

import androidx.lifecycle.Observer
import com.yizisu.basemvvm.mvvm.MvvmViewModel
import com.yizisu.basemvvm.mvvm.mvvm_helper.*

class BaseViewModel : MvvmViewModel() {
    /**
     * 创建一个带有状态的liveData，用于与activity/fragment/dialog通讯
     * 具体什么状态需要自己调用方法实现
     */
    val testLiveBean = createLiveBean<String>()

    fun testLiveBeanFun() {
        //支持任何地方调用，已经处理在子线程调用的情况，对应的liveBean状态是LiveBeanStatus.START
        testLiveBean.start()
        //支持任何地方调用，已经处理在子线程调用的情况，对应的liveBean状态是LiveBeanStatus.FAIL
        testLiveBean.fail("错误信息")
        //支持任何地方调用，已经处理在子线程调用的情况，对应的liveBean状态是LiveBeanStatus.SUCCESS
        testLiveBean.success("这里给liveData赋值")
    }

    /**
     * 创建一个可以监听LiveBean的liveData，用于与activity/fragment/dialog通讯
     *  具体什么状态需要自己调用方法实现
     */
    val testMediatorLiveBean = createMediatorLiveBean<String>()

    fun testMediatorLiveBeanFun() {
        //支持任何地方调用，已经处理在子线程调用的情况，对应的liveBean状态是LiveBeanStatus.START
        testMediatorLiveBean.start()
        //支持任何地方调用，已经处理在子线程调用的情况，对应的liveBean状态是LiveBeanStatus.FAIL
        testMediatorLiveBean.fail("错误信息",1)
        //支持任何地方调用，已经处理在子线程调用的情况，对应的liveBean状态是LiveBeanStatus.SUCCESS
        testMediatorLiveBean.success("这里给liveData赋值")
        //对testLiveBean进行监听，testLiveBean数据发生改变这里会回调
        testMediatorLiveBean.addLiveBeanListener(testLiveBean, Observer {

        })
    }


    /**
     * 这里列举所有可以调用的方法
     */
    fun otherFun() {
        //创建一个model类
        val model = getModel<BaseModel>()

    }
}